The term cryptography is used to refer to techniques for taking legible, readable data and transforming such data into unreadable data for the purpose of secure transmission. Upon the unreadable data reaching an intended destination, a key known only to the sender and legitimate recipients of the data can be utilized to transform the unreadable data back to a legible form. Modern cryptography systems are extremely complex, such that for many computer implemented cryptography systems, it is provably difficult to break such systems without knowledge of the key.
In the relatively recent past hackers discovered that some knowledge pertaining to a cryptography system, a key, or data desirably kept secret can be gleaned by monitoring physical implementation of the cryptography system with hardware of a computer. Thus, physical parameters pertaining to the hardware of a computing device can be monitored, such as an amount of time required to execute an instruction, an amount of power utilized to execute an instruction, etc., and these physical parameters can be utilized to break a cryptographic system. Obtaining information by monitoring physical implementation of a cryptography system and attempting to use such information to break the cryptography system is referred to as a side channel attack.
Types or classes of side channel attacks include timing attacks, power monitoring attacks, and acoustic attacks, amongst other attacks. A timing attack is configured to measure an amount of time required to perform certain computations on a computer and utilizing such time to ascertain some knowledge about a cryptography system and/or underlying data and/or a private key. A power monitoring attack monitors power consumption by hardware during computation of a cryptographic function and utilizing this varying power to learn something about the cryptography system. An acoustic attack refers to monitoring of sound produced by hardware of a computer during certain execution of certain instructions/computations to infer knowledge about a cryptographic system. These are but a few of the many currently implemented side channel attacks.
Conventional techniques for mitigating side channel attacks include developing cryptographic programs with constant memory access patterns. That is, the program must be implemented such that it accesses memory in a consistent pattern regardless of the underlying data. Another technique is to develop a cryptographic program such that there is constant program flow (there is no data dependent branching in the cryptographic program). Still further, some side channel attacks can be mitigated by utilizing top of the line hardware. Generally these methods for mitigating side channel attacks are not feasible because oftentimes individuals cannot choose the hardware that comes on the machine, and developing a program with constant memory access or with constant program flow can drastically negatively impact performance of an executing cryptographic function.